iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
佛心分享-SideProject30

使用unity 及 photon fusion 打造線上RTS遊戲系列 第 9

Day 9 Networked Properties 已連網屬性

  • 分享至 

  • xImage
  •  

基本介紹

Networked Properties連網屬性,在網路同步最重要的便是諸多數值的同步,在遊戲中可能是如血量、位置、速度、時間等等,在Photon Fusion中便提供連網屬性,連網屬性能夠標示需要同步的屬性,便能夠自動同步數值,但在Fusion中也連網屬性有所限制,並非所有屬性皆能同步。

[Networked] 
public float Health { get; set; }  //建立基本連網屬性
[Networked, Capacity(14)] //指定長度
public string Name { get; set; } = 100; //基本屬性賦值

已連網屬性遇到諸如字串、陣列、串列等等變動大小的資料型態,會需要指定最大大小,

[Networked] 
public float Health { get; set; }  //建立基本連網屬性

// 所有狀態皆能呼叫; 僅限擁有狀態授權能夠接收並使用
[Rpc (RpcSources.All, RpcTargets.StateAuthority, HostMode = RpcHostMode.SourceIsHostPlayer)]
public void RPC_BeDamage(float damage, RpcInfo info = default)
{
    currentHealth -= damage;
}

public override void FixedUpdateNetwork()
{
    RPC_BeDamage(1);
}

已連網屬性能夠同步數值,但倘諾需要修改數值則僅限定擁有該物件的狀態授權能夠修改該屬性,所以會需要用到前幾章的RPC來對擁有狀態授權的節點發送,才能夠修改數值。

更改檢測

public class Example : NetworkBehaviour
{
    [Networked, OnChangedRender(nameof(OnColorChanged))]
    public Color NetworkedColor  { get; set; }

    public Material material;

    public void OnColorChanged()
    {
        material.color = NetworkedColor;
    }
}

使用已連網屬性時,一個常見的例子是在已連網屬性的值發生變化時執行程式碼。在Fusion 中提供更改偵測,來相對方便的修改,及撰寫程式碼。

引用來源

https://doc.photonengine.com/zh-tw/fusion/current/manual/data-transfer/networked-properties
https://doc.photonengine.com/zh-tw/fusion/current/manual/data-transfer/change-detection


上一篇
Day 8 Photon Fusion 2 Host Mode 基本設定
下一篇
Day 10 Photon Fusion 專案設定(上)
系列文
使用unity 及 photon fusion 打造線上RTS遊戲13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言